package com.ply.mapper;

import com.ply.entity.pojo.DetailAccountRecord;
import com.ply.entity.pojo.Project;
import com.ply.entity.pojo.User;
import com.ply.entity.vo.ProjectAndOption;
import com.ply.entity.vo.ProjectOption;
import com.ply.entity.vo.UserAndProject;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author XiaoPan
 * date: 2022/1/7 19:00
 * <p>
 * action: 用户mapper层
 */

@Mapper
public interface UserMapper {



    /**
     * 增加用户 也就是注册用户
     *
     * @param user 用户对象
     * @return 1代表成功 0失败
     */
    int addUser(User user);


    /**
     * 更新用户充值总金额
     *
     * @param userId     用户id
     * @param amount 金额的 加减
     * @return 1代表成功 0失败
     */
    int updateUserCharge(@Param("userId") int userId,
                         @Param("amount") double amount);

    /**
     * 更新用户的余额
     *
     * @param id     用户id
     * @param amount 余额的 加减
     * @return 1代表成功 0失败
     */
    int updateUserRemainSum(@Param("userId") int id,
                            @Param("amount") double amount);

    /**
     * 更新用户的等级(升级) (也可以降级)
     *
     * @param userId      用户id
     * @param levelId 等级id
     * @return 1代表成功 0失败
     */
    int updateUserLevelId(@Param("userId") int userId,
                          @Param("levelId") int levelId);

    /**
     * 更新用户剩余发起投票数
     *
     * @param userId            用户id
     * @param remainVoteSum 剩余投票数
     * @return 1代表成功 0失败
     */
    int updateUserRemainVoteSum(@Param("userId")  int userId,
                                @Param("remainVoteSum") int remainVoteSum);

    /**
     * 更新用户密码
     *
     * @param userId       用户id
     * @param password 用户新密码
     * @return 1代表成功 0失败
     */
    int updateUserPasswordById(@Param("userId")  int userId,
                           @Param("password") String password);


    /**
     * 查询 所有用户  管理员会调用
     *
     * @return List<User></>
     */
    List<User> queryUserAll(Integer begin,Integer end);

    /**
     * 根据name 查询User
     *
     * @param name 用户名
     * @return User实体
     */
    User queryUserByName(@Param("name") String name);

    /**
     * 根据id 查询User
     *
     * @param userId 用户id名
     * @return User实体
     */
    User queryUserByUserId(@Param("userId") int userId);


    /**
     * 删除用户 管理员有可能会调用
     *
     * @param id 用户id
     * @return 1代表成功 0失败
     */
//    int deleteUserById(int id);



    /**
     * 查看流水 (分页 完成)
     * 查看用户所创建的项目 包括所属选项 (分页 完成)
     * 查看所有用户的信息 (分页 已完成)
     *
     */



    /**
     * 通过 用户id 查询 流水
     *
     * @param begin
     * @param end
     * @param userId
     * @return
     */
    List<DetailAccountRecord> queryAllByUserId(@Param("begin") Integer begin,
                                               @Param("end") Integer end,
                                               @Param("userId") Integer userId);


    /**
     * 查询 所有用户的流水
     * @param begin
     * @param end
     * @return
     */
    List<DetailAccountRecord> queryAllByUserRecode(@Param("begin") Integer begin,
                                               @Param("end") Integer end);


    /**
     * 查询 所有 的 项目  选项
     * @param begin
     * @param end
     * @return
     */

    List<ProjectOption> queryAllProject(@Param("begin") Integer begin,
                                        @Param("end") Integer end);

   /**
     * 查询 我 的 创建的  选项
     * @param begin
     * @param end
     * @return
     */

    List<ProjectOption> queryMyProject(@Param("begin") Integer begin,
                                        @Param("end") Integer end,
                                       @Param("userId") Integer userId);

    /**
     * 查询 我 的 创建的  选项
     * @param begin
     * @param end
     * @return
     */

    List<Project> queryMyProjectNoVoteOp(@Param("begin") Integer begin,
                                         @Param("end") Integer end,
                                         @Param("userId") Integer userId);






//    /**
//     * 根据 用户id 查询 所有项目 信息 (有分页)
//     *
//     * @param begin
//     * @param end
//     * @param userId 用户id
//     * @return
//     */
//
//    List<ProjectAndOption> queryMyProject(@Param("begin") Integer begin,
//                                          @Param("end") Integer end,
//                                          @Param("userId") Integer userId);
//




}
